#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
增强版聊天客户端
集成RSS新闻获取和大模型分析功能
"""

from chat_client import ChatClient
from rss_news import RSSNewsFetcher
from config import API_CONFIG, SYSTEM_PROMPTS
import json
from typing import List, Dict


class EnhancedChatClient:
    """增强版聊天客户端"""
    
    def __init__(self):
        """初始化增强版聊天客户端"""
        # 初始化大模型客户端
        self.chat_client = ChatClient(
            api_key=API_CONFIG["api_key"],
            base_url=API_CONFIG["base_url"],
            model=API_CONFIG["model"]
        )
        
        # 初始化RSS新闻获取器
        self.news_fetcher = RSSNewsFetcher()
        
        # 默认RSS源
        self.default_rss_url = "https://rss.aishort.top/?type=36kr"
    
    def get_news_and_analyze(self, rss_url: str = None, max_items: int = 5) -> str:
        """
        获取新闻并使用大模型分析
        
        Args:
            rss_url: RSS源地址，默认使用36kr
            max_items: 最大新闻条目数
            
        Returns:
            分析结果
        """
        if not rss_url:
            rss_url = self.default_rss_url
        
        print("📰 正在获取新闻...")
        news_data = self.news_fetcher.fetch_rss_news(rss_url, max_items)
        
        if 'error' in news_data:
            return f"获取新闻失败: {news_data['error']}"
        
        # 构建新闻摘要
        news_summary = f"新闻源: {news_data['title']}\n"
        news_summary += f"更新时间: {news_data['last_updated']}\n"
        news_summary += f"总条目数: {news_data['total_items']}\n\n"
        
        for i, item in enumerate(news_data['items'], 1):
            news_summary += f"{i}. {item['title']}\n"
            if item['published']:
                news_summary += f"   发布时间: {item['published']}\n"
            if item['description']:
                desc = item['description'][:300]  # 截取前300字符
                if len(item['description']) > 300:
                    desc += "..."
                news_summary += f"   内容: {desc}\n"
            news_summary += "\n"
        
        # 使用大模型分析新闻
        analysis_prompt = f"""请分析以下新闻内容，并提供：
1. 主要新闻主题和趋势
2. 重要信息摘要
3. 可能的影响和意义
4. 简要评论

新闻内容：
{news_summary}

请用中文回答，保持客观和专业。"""
        
        print("🤖 正在使用AI分析新闻...")
        analysis = self.chat_client.simple_chat(
            analysis_prompt,
            SYSTEM_PROMPTS["assistant"]
        )
        
        return f"📰 **新闻分析报告**\n\n{analysis}\n\n---\n\n📋 **原始新闻摘要**\n{news_summary}"
    
    def search_news_with_ai(self, keyword: str, rss_url: str = None, max_items: int = 20) -> str:
        """
        搜索新闻并使用AI分析
        
        Args:
            keyword: 搜索关键词
            rss_url: RSS源地址
            max_items: 最大搜索条目数
            
        Returns:
            搜索结果和分析
        """
        if not rss_url:
            rss_url = self.default_rss_url
        
        print(f"🔍 正在搜索关键词: {keyword}")
        matched_news = self.news_fetcher.search_news(rss_url, keyword, max_items)
        
        if not matched_news:
            return f"未找到包含关键词 '{keyword}' 的新闻"
        
        # 构建搜索结果
        search_result = f"找到 {len(matched_news)} 条相关新闻:\n\n"
        
        for i, item in enumerate(matched_news[:5], 1):  # 只显示前5条
            search_result += f"{i}. {item['title']}\n"
            if item['published']:
                search_result += f"   时间: {item['published']}\n"
            if item['description']:
                desc = item['description'][:200]
                if len(item['description']) > 200:
                    desc += "..."
                search_result += f"   内容: {desc}\n"
            search_result += "\n"
        
        # 使用AI分析搜索结果
        analysis_prompt = f"""基于以下关于"{keyword}"的新闻搜索结果，请提供：
1. 该主题的最新发展趋势
2. 重要信息汇总
3. 可能的影响分析
4. 相关建议或观点

搜索结果：
{search_result}

请用中文回答，保持客观和专业。"""
        
        print("🤖 正在使用AI分析搜索结果...")
        analysis = self.chat_client.simple_chat(
            analysis_prompt,
            SYSTEM_PROMPTS["assistant"]
        )
        
        return f"🔍 **'{keyword}' 搜索结果分析**\n\n{analysis}\n\n---\n\n📋 **相关新闻列表**\n{search_result}"
    
    def get_news_trends(self, rss_url: str = None, max_items: int = 10) -> str:
        """
        获取新闻趋势分析
        
        Args:
            rss_url: RSS源地址
            max_items: 最大新闻条目数
            
        Returns:
            趋势分析结果
        """
        if not rss_url:
            rss_url = self.default_rss_url
        
        print("📈 正在分析新闻趋势...")
        news_data = self.news_fetcher.fetch_rss_news(rss_url, max_items)
        
        if 'error' in news_data:
            return f"获取新闻失败: {news_data['error']}"
        
        # 提取所有标题用于趋势分析
        titles = [item['title'] for item in news_data['items']]
        titles_text = "\n".join([f"- {title}" for title in titles])
        
        # 使用AI分析趋势
        trend_prompt = f"""基于以下新闻标题，请分析当前的热点趋势：
1. 主要话题分类
2. 热点关键词
3. 行业趋势
4. 社会关注点

新闻标题列表：
{titles_text}

请用中文回答，提供结构化的趋势分析。"""
        
        print("🤖 正在使用AI分析趋势...")
        trends = self.chat_client.simple_chat(
            trend_prompt,
            SYSTEM_PROMPTS["assistant"]
        )
        
        return f"📈 **新闻趋势分析**\n\n{trends}\n\n---\n\n📋 **分析基于的新闻标题**\n{titles_text}"
    
    def interactive_chat(self):
        """交互式聊天界面"""
        print("=== 增强版AI聊天助手 ===")
        print("支持功能:")
        print("  - 普通聊天: 直接输入问题")
        print("  - 新闻分析: 输入 'news' 获取最新新闻分析")
        print("  - 新闻搜索: 输入 'search:关键词' 搜索相关新闻")
        print("  - 趋势分析: 输入 'trends' 获取新闻趋势")
        print("  - 退出: 输入 'quit' 或 'exit'")
        print("-" * 50)
        
        while True:
            try:
                user_input = input("\n用户: ").strip()
                
                if user_input.lower() in ['quit', 'exit', '退出']:
                    print("再见！")
                    break
                
                if not user_input:
                    continue
                
                # 处理特殊命令
                if user_input.lower() == 'news':
                    result = self.get_news_and_analyze()
                    print(f"\n助手: {result}")
                
                elif user_input.lower().startswith('search:'):
                    keyword = user_input[7:].strip()
                    if keyword:
                        result = self.search_news_with_ai(keyword)
                        print(f"\n助手: {result}")
                    else:
                        print("请输入搜索关键词，格式: search:关键词")
                
                elif user_input.lower() == 'trends':
                    result = self.get_news_trends()
                    print(f"\n助手: {result}")
                
                else:
                    # 普通聊天
                    response = self.chat_client.simple_chat(user_input)
                    print(f"助手: {response}")
                
            except KeyboardInterrupt:
                print("\n\n程序被中断，再见！")
                break
            except Exception as e:
                print(f"发生错误: {e}")


def main():
    """主函数"""
    client = EnhancedChatClient()
    
    print("选择运行模式:")
    print("1. 交互式聊天")
    print("2. 快速新闻分析")
    print("3. 搜索测试")
    
    choice = input("请选择 (1-3): ").strip()
    
    if choice == "1":
        client.interactive_chat()
    elif choice == "2":
        print("\n=== 快速新闻分析 ===")
        result = client.get_news_and_analyze()
        print(result)
    elif choice == "3":
        keyword = input("请输入搜索关键词: ").strip()
        if keyword:
            result = client.search_news_with_ai(keyword)
            print(result)
    else:
        print("无效选择，启动交互式聊天...")
        client.interactive_chat()


if __name__ == "__main__":
    main()
